package com.bjxst;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;

/**通过字节缓冲流提高读写效率
 * java缓冲流本身并不具有IO流的读取与写入功能，只是在别的流（节点流或其他处理流
 * ）上加上缓冲功能提高效率，就像是把别的流包装起来一样，因此缓冲流是一种处理流（包装流）
 *  当对文件或者其他数据源进行频繁的读写操作时，效率比较低，这时如果使用缓冲流就能够更高效
 *  的读写信息，因为缓冲流是先将数据缓存起来，然后当缓存区存满后或者手动刷新时再一次性
 *  的读取到程序或写入目的地
 *   因此，缓冲流还是很重要的我们在IO操作时加上缓冲流来提升性能
 *   BufferedInputStream和BuffedOutputStream这两个流是缓冲字节流，
 *   通过内部缓存数组来提高流的操作效率*/
public class FileStreamBuffed02 {
    public static void main(String[] args) {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try{
            //先实例化FileInputStream，再BufferedInputStream实例化
            //然后将FileInputStream放入BufferedInputStream的构造器中

            fis = new FileInputStream("e:/picture/1002.jpg");
            bis = new BufferedInputStream(fis);
            //合并写
           // bis = new BufferedInputStream(new FileInputStream("e/picture/1002.jpg"));
            fos = new FileOutputStream("e:/bb.jpg");
            bos = new BufferedOutputStream(fos);
            //缓冲流中的byte 数组长度默认是8192
            int temp = 0;
            while ((temp = bis.read())!= -1){
                bos.write(temp);
            }
            bos.flush();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //注意关闭顺序 后开先关
            try{
                if(bis != null)bis.close();
                if(fis != null)fis.close();
                if(bos != null)bos.close();
                if(fos != null)fos.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}
